package Client;

import CommonOperationsClientServer.OperationsRefactor;
import GUIClient.GUIExtraFunctions;
import Users.User;
import java.io.BufferedReader;
import java.io.PrintWriter;
import javax.swing.JTable;
import javax.swing.JTextPane;
import javax.swing.table.DefaultTableModel;

public class UsersOperationsClient {

    public static String sendInfoUser(BufferedReader input, PrintWriter output, User user,
            JTextPane panelClient) {
        String user_privileged = "userNotFound";
        try {
            OperationsRefactor.outputMessage(output, "receiveuser;" + user.toString());
            user_privileged = input.readLine();
            //@Abraham un poco tarde para hacer la comprobacin con null
            if (user_privileged.equals("userNotFound") || (user_privileged == null)) {
                GUIExtraFunctions.updateTextPane(panelClient, "El usuario no existe. Conection Refused");
            }
        } catch (Exception e) {
        }
        return user_privileged;
    }

    public static DefaultTableModel getUserList(BufferedReader input, PrintWriter output,
            JTable selectDeleteUserTable) {
        OperationsRefactor.outputMessage(output, "deleteuser");
        String listOfUsers = "";
        DefaultTableModel model;
        try {
            listOfUsers = input.readLine();
        } catch (Exception e) {
            System.out.println(e);
        }
        if (!listOfUsers.equals("")) {
            listOfUsers = listOfUsers.replace("[", "");
            listOfUsers = listOfUsers.replace("]", "");
            listOfUsers = listOfUsers.replaceAll(" ", "");
            String[] users = listOfUsers.split(",");
            model = (DefaultTableModel) selectDeleteUserTable.getModel();
            model.setNumRows(0);
            for (int i = 0; i < users.length; i++) {
                String[] user = users[i].split(";");
                Object[] file = new Object[3];
                file[0] = user[0];
                file[1] = user[1];
                file[2] = user[2];
                model.addRow(file);
            }
            return model;
        } else {
            return null;
        }
    }

    public static void createNewUser(BufferedReader input, PrintWriter output, User user, JTextPane localPane,
            JTextPane serverPane) {
        GUIExtraFunctions.updateTextPane(localPane, "Enviando solicitud para crear nuevo usuario...");
        OperationsRefactor.outputMessage(output, "createuser;" + user.toString());
        GUIExtraFunctions.updateTextPane(serverPane,
                "Recibida solicitud para crear nuevo usuario(" + user.getUserName() + ")");
        try {
            String response = input.readLine();
            switch (response) {
                case "usercreated":
                    GUIExtraFunctions.updateTextPane(localPane, "Nuevo usuario creado con éxito");
                    GUIExtraFunctions.updateTextPane(serverPane,
                            "Nuevo usuario creado (" + user.getUserName() + ")");
                    break;
                case "userexist":
                    GUIExtraFunctions.updateTextPane(localPane, "El usuario ya existe... Solicitud Rechazada");
                    GUIExtraFunctions.updateTextPane(serverPane,
                            "El usuario que se intenta crear ya existe. Solicitud Denegada");
                    break;
            }
        } catch (Exception e) {
            GUIExtraFunctions.updateTextPane(localPane, "Fallo en la comunicación.... ");
            GUIExtraFunctions.updateTextPane(serverPane, "Fallo en la comunicación....");
        }
    }

    public static void deleteUser(BufferedReader input, PrintWriter output, User user, JTextPane localPane,
            JTextPane serverPane) {
        GUIExtraFunctions.updateTextPane(localPane, "Enviando solicitud para borrar usuario...");
        OperationsRefactor.outputMessage(output, user.toString());
        GUIExtraFunctions.updateTextPane(serverPane,
                "Recibida solicitud para borrar usuario(" + user.getUserName() + ")");
        try {
            String response = input.readLine();
            switch (response) {
                case "usernotexists":
                    GUIExtraFunctions.updateTextPane(localPane, "El usuario no existe... Solicitud Rechazada");
                    GUIExtraFunctions.updateTextPane(serverPane,
                            "El usuario que se intenta borrar no existe. Solicitud Denegada");
                    break;
                case "userdeleted":
                    GUIExtraFunctions.updateTextPane(localPane, "Usuario borrado con éxito");
                    GUIExtraFunctions.updateTextPane(serverPane, "Usuario borrado (" + user.getUserName() + ")");
                    break;
            }
        } catch (Exception e) {
            GUIExtraFunctions.updateTextPane(localPane, "Fallo en la comunicación.... ");
            GUIExtraFunctions.updateTextPane(serverPane, "Fallo en la comunicación....");
        }
    }
}
